
//#include <stc15.h>
//#include <stdio.h>
//sbit Trig = P2^0;
//sbit Echo = P2^1;

//unsigned int time = 0;
//float dis;


//void Delay10us()
//{
// TMOD |= 0x1;
// TH0 = 0xFF;
// TL0 = 0xF6;
// TR0 = 1;
// while(!TF0);
// TF0 = 0;
//}
//void Rstart()  
//{
// Trig=0;
// Trig=1;
// Delay10us();
// Trig=0;
//}
//int gettime()
//{
// unsigned int time = 0;
// time = TH0*256+TL0;// TH0<<8 | TL0;
//	return time;
//}
//float Getdis(unsigned int time)  
//{
// float distance;
// distance = (float)time/58.3;
// TH0=0;
// TL0=0;
// return distance;
//}
//void star()
//{
// TH0 = 0;
// TL0 = 0;
// TR0 = 1;
//}
//void end()
//{
// TR0 = 0;
//}
//void GetOnce()  
//{
// Rstart();
// while(!Echo);
// star();
// while(Echo);
// end();
//}

//void UartInit(void)		//9600bps@12.000MHz
//{
//	SCON = 0x50;		//8位数据,可变波特率
//	AUXR |= 0x01;		//串口1选择定时器2为波特率发生器
//	AUXR |= 0x04;		//定时器2时钟为Fosc,即1T
//	T2L = 0xC7;		//设定定时初值
//	T2H = 0xFE;		//设定定时初值
//	AUXR |= 0x10;		//启动定时器2
//	EA=1;
//	ES=1;
//}


//void datko(unsigned char dat)
//{
//	SBUF=dat;
//	while(!TI);
//	TI=0;
//}

//char putchar(char c)
//{
//	datko(c);
//	return c;
//}


//void delay()
//{
// int i;
// int j;
// for(i=0;i<100;i++)
//  for(j = 0;j<2000;j++);
//}
// void main()
//{
////	Timer0Init(); 
//	UartInit();
//	while(1)
//	 {  
//		  printf("juli=%4.2fcm\r\n",dis);
//		 GetOnce();
//		  time = gettime();
//		  dis = Getdis(time);
//		 
//		 delay();delay();delay();
//	}

//}


#include <stc15.h>
#include <stdio.h>
#include <intrins.h>


#define uint unsigned int
	#define uchar unsigned char 
#define tx P20
#define rx P21

float ss;
unsigned long t_dly;	

void Timer0Init(void)		//10微秒@12.000MHz
{
	AUXR &= 0x7F;		//定时器时钟12T模式
	TMOD &= 0xF0;		//设置定时器模式
	
}

void UartInit(void)		//9600bps@12.000MHz
{
	SCON = 0x50;		//8位数据,可变波特率
	AUXR |= 0x01;		//串口1选择定时器2为波特率发生器
	AUXR |= 0x04;		//定时器2时钟为Fosc,即1T
	T2L = 0xC7;		//设定定时初值
	T2H = 0xFE;		//设定定时初值
	AUXR |= 0x10;		//启动定时器2
	EA=1;
	ES=1;
}


void datko(unsigned char dat)
{
	SBUF=dat;
	while(!TI);
	TI=0;
}

char putchar(char c)
{
	datko(c);
	return c;
}



void main_chaog()
{
	tx=0;           ////可写可不写，最好写减小误差
	tx=1;
	TL0 = 0xF6;		//设置定时初值
	TH0 = 0xFF;		//设置定时初值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
	while(!TF0);
	TR0 = 0;		//定时器0开始计时
	TF0=0;
	tx=0;
	while(!rx);       /////监测rx银角是否有接到信号反馈，如果有就不进行计时，重新发送
										/////触发信号，然后再监测，诺rx=1，可以计时，等rx接到低电平，就是信号反馈
										/////回来了，可以停止计时，进行换算。
	TL0 = 0;		//设置定时初值
	TH0 = 0;		//设置定时初值
	TR0 = 1;		//定时器0开始计时
	while(rx&&!TF0);
	TR0=0;
	if(TF0)
	{
		TF0=0;
		ss=800;
	}else 
	{
		t_dly=(uint)(TH0*256+TL0);
		ss=(float)t_dly/58.3;
	}
}

void Delay2000ms()		//@12.000MHz
{
	unsigned char i, j, k;

	_nop_();
	_nop_();
	i = 92;
	j = 50;
	k = 238;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

	
void main()
{
	Timer0Init();
	UartInit();
	while(1)
	{
		main_chaog();
		printf("juli=%4.2fcm\r\n",ss);
		Delay2000ms();
	}
}	